package pantallas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Vector;
import javax.swing.JFrame;
import elementosJuego.*;
import java.awt.event.KeyEvent;
import control.*;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import mensaje.Personajes;

public class PantallaJuego  extends JComponent implements WindowListener, KeyListener{

    private Vector<Figura> figura;
    private Vector<Figura> escenario;
    private JFrame jf;
    private ManejadorAcciones manejadorAcciones;

    public PantallaJuego(ManejadorAcciones manejadorAcciones){
        this.manejadorAcciones = manejadorAcciones;
        figura = new Vector<Figura>();
        escenario = new Vector<Figura>();
        generarVentana();
    }

    private void generarVentana(){
        jf=new JFrame("Pantalla de Juego");
        jf.addWindowListener(this);
        jf.addKeyListener(this);
        jf.setLayout(null);
        jf.setBounds(0,0,800,700);
        jf.setBackground(Color.GRAY);
        setBounds(20,20,760,640);
        jf.getContentPane().add(this);
        jf.setVisible(true);
     }

    /*este metodo nos grafica el entonrno, nos pone los cuadraditos de los jugadores con sus niveles y todo eso*/

    public void generarEntornoJuego(ArrayList<Personajes> jugadores){
        Integer x0=40;
        for(int i=0; i<jugadores.size(); i++){
            escenario.add(new CaraJugador(x0, 10, jugadores.get(i).getTipoPersonaje(), jugadores.get(i).getNombre()));
            x0+=140;
        }
    }

    public void generarEscenario(){

            System.out.println("Cargando Escenario...");

            /**BORDES*/
            escenario.add(new Pared(0, 100, 760, 3, Color.BLACK));
            escenario.add(new Pared(0, 100, 3, 540, Color.BLACK));
            escenario.add(new Pared(757, 100, 3, 540, Color.BLACK));
            escenario.add(new Pared(0, 637, 760, 3, Color.BLACK));

            /**PAREDES IZQUIERDA */

            escenario.add(new Pared(60,100,10,100,Color.BLACK));
            escenario.add(new Pared(60,260,10,200,Color.BLACK));
            escenario.add(new Pared(60,540,10,100,Color.BLACK));

            escenario.add(new Pared(130,160,10,185,Color.BLACK));
            escenario.add(new Pared(130,405,10,185,Color.BLACK));

            /**PAREDES CENTRO*/
            escenario.add(new Pared(200,160,10,185,Color.BLACK));
            escenario.add(new Pared(200,405,10,185,Color.BLACK));

            escenario.add(new Pared(200,160,150,10,Color.BLACK));
            escenario.add(new Pared(420,160,150,10,Color.BLACK));

            escenario.add(new Pared(200,580,150,10,Color.BLACK));
            escenario.add(new Pared(420,580,150,10,Color.BLACK));

            escenario.add(new Pared(560,160,10,185,Color.BLACK));
            escenario.add(new Pared(560,405,10,185,Color.BLACK));

            /**PAREDES DERECHA */
            escenario.add(new Pared(700,100,10,100,Color.BLACK));
            escenario.add(new Pared(700,260,10,200,Color.BLACK));
            escenario.add(new Pared(700,540,10,100,Color.BLACK));

            escenario.add(new Pared(630,160,10,185,Color.BLACK));
            escenario.add(new Pared(630,405,10,185,Color.BLACK));
    }
    /*aca asignamos los valores dados por el vector con las nuevas posicines a
     * los jugadores
     */
    public void actualizarJugadores(ArrayList<Integer[]> jugadores){
        figura.clear();
        for(int i=0; i<jugadores.size(); i++){
            figura.add(new Jugador(jugadores.get(i)[0], jugadores.get(i)[1], 40, 40, jugadores.get(i)[2], jugadores.get(i)[3], jugadores.get(i)[4]));
        }
    }
    /*todas las balas disparadas*/
    public void actualizarBalas(ArrayList<Integer[]> balas){
        for(int i=0; i<balas.size();i++){
              figura.add(new Bala(balas.get(i)[0],balas.get(i)[1],5,5,Color.BLACK));
        }
    }

    @Override
    public void paint (Graphics g){
        ImageIcon icono = new ImageIcon(System.getProperty("user.dir")+"/imagenes/piso.jpg");
        g.drawImage(icono.getImage(), 0, 100, null);
        for (int i0=0;i0<escenario.size();i0++){
            escenario.get(i0).dibujate(g);
        }
        for (int i0=0;i0<figura.size();i0++){
            figura.get(i0).dibujate(g);
        }
    }
    public void cerrarPantalla(){
        jf.setVisible(false);
    }
    public void windowOpened(WindowEvent e) {}
    public void windowClosing(WindowEvent e) {
        manejadorAcciones.salir();
    }
    public void windowClosed(WindowEvent e) {
        manejadorAcciones.salir();
    }
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowActivated(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void keyTyped(KeyEvent arg0) { }
    public void keyPressed(KeyEvent e) {
        manejadorAcciones.recibeMovimiento(e);
    }
    public void keyReleased(KeyEvent e) {
        manejadorAcciones.recibeBala(e);
    }
}
